FCM (Firebase Cloud Messaging) 是一個由 Google 開發的雲端訊息傳送服務,用於向移動應用程式、網站和其他應用程式發送即時通知和訊息。
可用於Android、iOS和網頁應用程式發送通知。這使開發者能夠透過單一服務來管理跨不同平台的通知。
可以發送即時通知,讓您的應用程式能夠向用戶傳送重要的消息、提醒和更新。
支援主題訂閱,允許用戶訂閱特定主題或主題群組。這使得您可以針對特定用戶群體或內容類別發送通知。
除了通知之外,FCM 還可以用於傳輸自訂數據給應用程式,這使得應用程式可以實時更新數據,而無需等待用戶打開應用程式。
FCM 設計為高可靠性,確保訊息能夠穩定傳遞,即使在不穩定的網絡環境中也能正常工作。
您可以使用 FCM 將通知和訊息定向發送給特定用戶分段,這樣可以更精確地達到您的應用程式目標。
FCM 緊密整合了 Firebase 生態系統中的其他服務,如 Firebase Authentication、Firebase Realtime Database 和 Firebase Cloud Firestore。這使得開發者能夠輕鬆地建立全功能的應用程式。
FCM 提供詳細的統計和分析工具,讓您可以追蹤通知的效果,了解用戶互動和回應。
首先前往Firebase 控制台,並登錄您的 Google 帳戶。
點擊新增專案,然後按照指示設置您的 Firebase 專案。
建立完後長這樣
點擊專案總覽旁邊的齒輪點選專案設定
點選服務帳戶會看見Firebase Admin SDK 點擊產生新的私密金鑰
生成新的私密金鑰是用於授予應用程式或服務對 Firebase 的安全訪問權限。這個私密金鑰是一個 JSON 文件,包含用戶帳戶的憑證信息,允許您的應用程式以應用程式身份對 Firebase 進行驗證和授權
點擊產生金鑰,這時會產生一個json檔給你,要把此json檔放入spring專案裡。
<dependency>
<groupId>com.google.firebase</groupId>
<artifactId>firebase-admin</artifactId>
<version>9.2.0</version>
</dependency>
將剛剛下載的私密金鑰.json直接掉到專案裡面
新增一個FCM的Configuration
@Configuration
@Slf4j
public class FcmConfig {
@Bean
public FirebaseApp initializeFirebaseApp() {
try {
// 載入Firebase Admin SDK的設定
FirebaseOptions options = FirebaseOptions.builder()
.setCredentials(GoogleCredentials.fromStream(new FileSystemResource("smart-home-firebase-adminsdk.json").getInputStream()))
.build();
// 初始化Firebase App
FirebaseApp firebaseApp = FirebaseApp.initializeApp(options);
// 檢查FirebaseApp是否初始化成功
log.info("FirebaseApp 初始化 成功!");
// 初始化Firebase App
return firebaseApp;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
啟動spring boot 就可以看見
@RestController
@RequiredArgsConstructor
@RequestMapping("/fcm")
public class FcmController {
private final FcmService service;
@PostMapping("/send")
public void sendNotification(@RequestBody NotificationRequest request) {
// 發送通知
service.sendNotification(request);
}
}
@Builder @AllArgsConstructor @NoArgsConstructor @Data public class NotificationRequest { private String fcm_token; private String title; private String body; }
這裡的fcm_token為FCM 裝置標記(token)來識別特定的移動應用程式實例。每當用戶在他們的裝置上安裝您的應用程式,或者當應用程式首次啟動時,您的應用程式可以向 FCM 註冊,並獲得一個唯一的 token。這個 token 與特定用戶和特定裝置相關聯。
@Service
public class FcmService {
public void sendNotification(String token, String title, String body) {
// 初始化 Firebase Messaging
FirebaseMessaging messaging = FirebaseMessaging.getInstance();
// 建立要發送的訊息
Message message = Message.builder()
.putData("title", title)
.putData("body", body)
.setToken(token)
.build();
try {
// 發送通知
messaging.send(message);
} catch (FirebaseMessagingException e) {
e.printStackTrace();
}
}
}
這裡無法示範發送通知因為我們沒有用戶端的FCM token
下一篇我們會教如何在Android Studio使用FCM
接收從Spring boot所發送的通知
//使用者裝置FCM token
String userToken = "USER_FCM_TOKEN";
Message message = Message.builder()
.putData("Data1", "hellow")
.putData("Data2", "world")
.setToken(userToken)
.build();
String response = FirebaseMessaging.getInstance().send(message);
每次傳送最多500個裝置
List<String> userTokens = Arrays.asList(
"USER_FCM_TOKEN_1",
// ...
"USER_FCM_TOKEN_n"
);
MulticastMessage message = MulticastMessage.builder()
.putData("Data1", "hellow")
.putData("Data2", "world")
.addAllTokens(userTokens)
.build();
BatchResponse response = FirebaseMessaging.getInstance().sendMulticast(message);
通知消息通常包含標題、內容和小圖示,用於在裝置上顯示通知。當應用程式處於前景或背景時,通知消息會自動顯示在裝置上。用戶可以點擊通知以啟動應用程式或執行其他操作。
{
"message":{
"token":"bk5RNaTe3H0:CI2q_OOwfIxcDKCIKvvDMEbUdFQ3P1...",
"notification":{
"title":"Hello",
"body":"World"
}
}
}
數據消息是純粹的自訂數據,通常不會在裝置上自動顯示通知。您可以使用數據消息來傳遞應用程式需要處理的任何資料。應用程式可以在後台處理這些消息,並根據其中的內容執行操作。
{
"message":{
"token":"bk5RNaTe3H0:CI2q_OOwfIxcDKCIKvvDMEbUdFQ3P1...",
"data":{
"Home" : "home",
"Room" : "room",
"Device" : "device"
}
}
}
混合消息結合了通知消息和數據消息的功能。它們包含通知的可見部分,以及自定義數據供應用程式使用。當應用程式處於前景或背景時,通知部分會顯示在裝置上,並且應用程式可以處理自定義數據。
{
"message":{
"token":"bk5RNaTe3H0:CI2q_OOwfIxcDKCIKvvDMEbUdFQ3P1...",
"notification":{
"title":"Hello",
"body":"World"
},
"data" : {
"Home" : "home",
"Room" : "room",
"Device" : "device"
}
}
}